﻿//using UnityEngine;
//using System.Collections;

//namespace GCommon
//{
//    public class ReusableObject : MonoBehaviour
//    {
//        public ResourceID ResID { get; set; }
//        public IReusableObjectOwner OwnerEntity { get; set; }

//        private bool m_IsInPool = false;

//        public bool IsInPool
//        {
//            get { return m_IsInPool; }
//        }

//        public virtual void Prepare()
//        {
//            m_IsInPool = false;
//        }
        
//        public void Recycle(float delayTime = 0)
//        {
//            if (MathUnity.IsZero(delayTime))
//            {
//                DoRecycle();
//            }
//            else
//            {
//                Invoke("DoRecycle", delayTime);
//            }
//        }

//        public void TemporyStopUsing()
//        {
//            if (OwnerEntity != null)
//            {
//                OwnerEntity.OnReusableObjectRecycled(ResID, gameObject);
//                OwnerEntity = null;
//            }
//            CancelInvoke();
//        }
        
//        protected virtual void DoRecycle()
//        {
//            if (m_IsInPool)
//            {
//                Debug.LogError("ReusableObject is allready in pool");
//                return;
//            }
            
//            if (OwnerEntity != null)
//            {
//                OwnerEntity.OnReusableObjectRecycled(ResID, gameObject);
//                OwnerEntity = null;
//            }

//            gameObject.transform.parent = null;
//            bool bRecycled = ResourceManager.instance.PoolReturnRes(ResID, gameObject);
//            m_IsInPool = bRecycled;
//            if (!bRecycled)
//                Destroy(gameObject);
//        }
//    }
//}